package entidades;

import util.Util;
import util.MySQL;
import java.util.Date;
import java.util.List;
import java.util.HashMap;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.google.gson.Gson;

/**
 *
 * @author JFM
 */
public class CapacidadUteco extends Entidad
	{
	private int utecoId;
	private int capacidad;
	private Date fechaInicio;
	private Date fechaFin;

	private Uteco uteco;

	static final String NOMBRE_TABLA = "capacidades_uteco";


	// --- Constructores --- //

	public CapacidadUteco()
		{
		id = 0;
		capacidad = 0;
		fechaInicio = null;
		fechaFin = null;

		utecoId = 0;
		uteco = null;
		}

	public CapacidadUteco(int id) throws SQLException
		{ super(id); }

	public CapacidadUteco(String id) throws SQLException
		{ super(id); }

	public CapacidadUteco(ResultSet result) throws SQLException
		{ super(result); }



	// --- Metodos get()/set() --- //

	public int getCapacidad()
		{ return capacidad; }
	public void setCapacidad(int capacidad)
		{ this.capacidad = capacidad; }
	public void setCapacidad(String capacidad)
		{ try{ this.capacidad = Integer.parseInt(capacidad); }catch(Exception e) {}; }

	public Date getFechaFin()
		{ return fechaFin; }
	public void setFechaFin(Date fechaFin)
		{ this.fechaFin = fechaFin; }
	public void setFechaFin(String fechaFin)
		{ this.fechaFin = Util.parseDate(fechaFin); }
	public String getFechaFinToString()
		{ return Util.format(fechaFin, "dd/MM/yyyy"); }

	public Date getFechaInicio()
		{ return fechaInicio; }
	public void setFechaInicio(Date fechaInicio)
		{ this.fechaInicio = fechaInicio; }
	public void setFechaInicio(String fechaInicio)
		{ this.fechaInicio = Util.parseDate(fechaInicio); }
	public String getFechaInicioToString()
		{ return Util.format(fechaInicio, "dd/MM/yyyy"); }

	public Uteco getUteco() throws SQLException
		{
		if(uteco == null || utecoId != uteco.getId())
			{ uteco = new Uteco(utecoId); }
		return uteco;
		}

	public int getUtecoId()
		{ return utecoId; }
	public void setUtecoId(int utecoId)
		{ this.utecoId = utecoId; }
	public void setUtecoId(String utecoId)
		{ try{ this.utecoId = Integer.parseInt(utecoId); }catch(Exception e) {}; }

	@Override
	public String getDescriptor()
		{ return "Uteco " + utecoId + ": " + Util.format(fechaInicio, "dd/MM/yyyy") + " a " + Util.format(fechaFin, "dd/MM/yyyy"); }

	@Override
	public String toJson()
		{
		HashMap map = new HashMap();
		map.put("id", id);
		map.put("uteco_id", utecoId);
		map.put("capacidad", capacidad);
		map.put("fecha_inicio", Util.format(fechaInicio, "dd/MM/yyyy"));
		map.put("fecha_fin", Util.format(fechaFin, "dd/MM/yyyy"));
		return new Gson().toJson(map);
		}



	// --- Metodos MySQL --- //

	@Override
	public String getNombreTabla()
		{ return NOMBRE_TABLA; }

	@Override
	public void leer(ResultSet result, String prefijo) throws SQLException
		{
		setId(result.getInt(prefijo + "id"));
		setFechaInicio(result.getDate(prefijo + "fecha_inicio"));
		setFechaFin(result.getDate(prefijo + "fecha_fin"));
		setCapacidad(result.getInt(prefijo + "capacidad"));
		setUtecoId(result.getInt(prefijo + "uteco_id"));
		}

	@Override
	public void guardar() throws SQLException
		{
		ResultSet result = MySQL.executeQuery("Call CapacidadesUteco_Save(" +
				MySQL.formatId(id) + "," +
				MySQL.formatId(utecoId) + "," +
				MySQL.format(capacidad) + "," +
				MySQL.format(fechaInicio) + "," +
				MySQL.format(fechaFin) + ")");

		if(result.next())
			{
			if( result.getMetaData().getColumnCount() == 1)
				{
				String msj = result.getString("mensaje");
				throw new SQLException(msj);
				}
			else
				leer(result);
			}

		result.getStatement().close();
		}

	public static void borrar(String id) throws SQLException
		{ MySQL.executeUpdate("Call CapacidadesUteco_Delete(" + id + ")"); }

	public static List<CapacidadUteco> listar() throws SQLException
		{ return (List) Entidad.listar(CapacidadUteco.class, NOMBRE_TABLA, "uteco_id ASC, fecha_inicio ASC"); }

	public static List<CapacidadUteco> listar(Date fecha) throws SQLException
		{ return (List) Entidad.buscar(CapacidadUteco.class, NOMBRE_TABLA, "fecha_fin >= " + MySQL.formatDateMin(fecha) , "uteco_id ASC, fecha_inicio ASC"); }
	}
